home *** CD-ROM | disk | FTP | other *** search
/ CD Actual 9 / CDACTUAL9.iso / share / Dos / VARIOS / pascal / SWAG9605.DDD / 0079_LED Paint Unit.pas < prev    next >
Encoding:
Pascal/Delphi Source File  |  1996-05-31  |  7.7 KB  |  281 lines

  1. {
  2.   Q: Why doing the 243. version of a LED light.
  3.   A: It does not use bitmaps - so it|s fully scaleable (and saves resources).
  4.  
  5.   Contact: Udo Juerss, 57078 Siegen, Germany, CompuServe [101364,526]
  6.  
  7.   March 9. 1996
  8.  
  9.   Greetings from germany - enjoy...
  10. }
  11.  
  12. unit
  13.   LEDPaint;
  14.  
  15. interface
  16.  
  17. uses
  18.   WinTypes, WinProcs, Messages, Classes, Graphics, Controls, ExtCtrls;
  19. {------------------------------------------------------------------------------}
  20.  
  21. type
  22.   TLEDColor = (lcRed,lcGreen,lcBlue,lcYellow,lcNone);
  23.   TLEDType = (ltRound,ltRect);
  24.  
  25.   TLEDPaint = class(TGraphicControl)
  26.   private
  27.     FBackGround: TColor;
  28.     FBevelOuter: TPanelBevel;
  29.     FBevelInner: TPanelBevel;
  30.     FBevelWidth: Byte;
  31.     FLEDColor: TLEDColor;
  32.     FLEDOn: Boolean;
  33.     FLEDType: TLEDType;
  34.     Border: Byte;
  35.   protected
  36.     procedure Draw(BkGnd:Boolean);
  37.     procedure DrawBevel(Rect: TRect);
  38.     procedure SetBackGround(Value: TColor);
  39.     procedure SetBevelOuter(Value: TPanelBevel);
  40.     procedure SetBevelInner(Value: TPanelBevel);
  41.     procedure SetBevelWidth(Value: Byte);
  42.     procedure SetLED(Value:Boolean);
  43.     procedure SetLEDColor(Value: TLEDColor);
  44.     procedure SetLEDType(Value: TLEDType);
  45.   public
  46.     constructor Create(AOwner: TComponent); override;
  47.     procedure Paint; override;
  48.   published
  49.     property BackGround: TColor read FBackGround write SetBackGround default clBtnFace;
  50.     property BevelOuter: TPanelBevel read FBevelOuter write SetBevelOuter default bvRaised;
  51.     property BevelInner: TPanelBevel read FBevelInner write SetBevelInner default bvRaised;
  52.     property BevelWidth: Byte read FBevelWidth write SetBevelWidth default 1;
  53.     property LEDColor: TLEDColor read FLEDColor write SetLEDColor default lcRed;
  54.     property LEDOn: Boolean read FLEDOn write SetLED default False;
  55.     property LEDType: TLEDType read FLEDType write SetLEDType default ltRound;
  56.   end;
  57. {------------------------------------------------------------------------------}
  58.  
  59. procedure Register;
  60.  
  61. implementation
  62. {------------------------------------------------------------------------------}
  63.  
  64. constructor TLEDPaint.Create(AOwner: TComponent);
  65. begin
  66.   inherited Create(AOwner);
  67.   Canvas.Brush.Style:=bsSolid;
  68.   FBackGround:=clBtnFace;
  69.   FBevelOuter:=bvRaised;
  70.   FBevelInner:=bvRaised;
  71.   FBevelWidth:=1;
  72.   FLEDColor:=lcRed;
  73.   FLEDOn:=False;
  74.   FLEDType:=ltRound;
  75.   Border:=2;
  76.   Left:=0;
  77.   Top:=0;
  78.   Width:=19;
  79.   Height:=19;
  80. end;
  81. {------------------------------------------------------------------------------}
  82.  
  83. procedure TLEDPaint.Paint;
  84. begin
  85.   Draw(True);
  86. end;
  87. {------------------------------------------------------------------------------}
  88.  
  89. procedure TLEDPaint.DrawBevel(Rect: TRect);
  90. var
  91.   TopColor: TColor;
  92.   BottomColor: TColor;
  93.  
  94.   procedure SetColors(Bevel: TPanelBevel);
  95.   begin
  96.     TopColor:=clBtnHighlight;
  97.     if Bevel = bvLowered then TopColor:=clBtnShadow;
  98.     BottomColor:=clBtnShadow;
  99.     if Bevel = bvLowered then BottomColor:=clBtnHighlight;
  100.   end;
  101.  
  102. begin
  103.   if FBevelOuter <> bvNone then
  104.   begin
  105.     SetColors(BevelOuter);
  106.     Frame3D(Canvas,Rect,TopColor,BottomColor,BevelWidth);
  107.   end;
  108.  
  109.   if FBevelInner <> bvNone then
  110.   begin
  111.     SetColors(FBevelInner);
  112.     Frame3D(Canvas,Rect,TopColor,BottomColor,FBevelWidth);
  113.   end;
  114. end;
  115. {------------------------------------------------------------------------------}
  116.  
  117. procedure TLEDPaint.Draw(BkGnd: Boolean);
  118. var
  119.   R: TRect;
  120.   OnColor: TColor;
  121.   OffColor: TColor;
  122.   UpColor: TColor;
  123.   DnColor: TColor;
  124.   S: Byte;
  125. begin
  126.   R:=GetClientRect;
  127.   S:=Width div 6;                      {Abstand der Schattierung vom Au-enkreis}
  128.  
  129.   if BkGnd or (csDesigning in ComponentState) then
  130.   begin
  131.     DrawBevel(R);
  132.  
  133.     if FBackGround <> clWindow then
  134.     begin
  135.       Canvas.Pen.Color:=FBackGround;
  136.       Canvas.Brush.Color:=FBackGround;
  137.       InflateRect(R,-Border,-Border);
  138.       Canvas.FillRect(R);
  139.     end;
  140.   end
  141.   else InflateRect(R,-Border,-Border);
  142.  
  143.   case FLEDColor of
  144.     lcNone   : begin
  145.                  OnColor:=clBtnFace;
  146.                  OffColor:=clBtnFace;
  147.                end;
  148.     lcRed    : begin
  149.                  OnColor:=clRed;
  150.                  OffColor:=clMaroon;
  151.                end;
  152.     lcGreen  : begin
  153.                  OnColor:=clLime;
  154.                  OffColor:=clGreen;
  155.                end;
  156.     lcBlue   : begin
  157.                  OnColor:=clBlue;
  158.                  OffColor:=clNavy;
  159.                end;
  160.     lcYellow : begin
  161.                  OnColor:=clYellow;
  162.                  OffColor:=clOlive;
  163.                end;
  164.   end;
  165.  
  166.   if FLEDOn then Canvas.Brush.Color:=OnColor else Canvas.Brush.Color:=OffColor;
  167.  
  168.   Canvas.Pen.Width:=1;
  169.   if FLEDType = ltRound then
  170.   begin
  171.     if not FLEDOn then Canvas.Pen.Color:=clSilver else Canvas.Pen.Color:=clGray;
  172.     Canvas.Ellipse(R.Left,R.Top,R.Right,R.Bottom);
  173.     if FLEDOn then Canvas.Pen.Color:=clSilver else Canvas.Pen.Color:=clGray;
  174.     Canvas.Arc(R.Left + S,R.Top + S,
  175.                R.Right - S,R.Bottom - S,
  176.                R.Right - S,R.Top + S,
  177.                R.Left + S,R.Bottom - S);
  178.   end
  179.   else
  180.   begin
  181.     case BevelInner of
  182.       bvRaised  : Frame3D(Canvas,R,clBlack,clWhite,1);
  183.       bvLowered : Frame3D(Canvas,R,clWhite,clBlack,1);
  184.       bvNone    : begin
  185.                     if FBevelOuter = bvLowered then
  186.                       Frame3D(Canvas,R,clWhite,clBlack,1)
  187.                     else Frame3D(Canvas,R,clBlack,clWhite,1);
  188.  
  189.                   end;
  190.     end;
  191.     Canvas.FillRect(R);
  192.   end;
  193. end;
  194. {------------------------------------------------------------------------------}
  195.  
  196. procedure TLEDPaint.SetBackGround(Value: TColor);
  197. begin
  198.   if FBackGround <> Value then
  199.   begin
  200.     FBackGround:=Value;
  201.     Draw(True);
  202.   end;
  203. end;
  204. {------------------------------------------------------------------------------}
  205.  
  206. procedure TLEDPaint.SetBevelOuter(Value: TPanelBevel);
  207. begin
  208.   if FBevelOuter <> Value then
  209.   begin
  210.     FBevelOuter:=Value;
  211.     if FBevelOuter <> bvNone then Border:=FBevelWidth else Border:=0;
  212.     if FBevelInner <> bvNone then Inc(Border,FBevelWidth);
  213.     Draw(True);
  214.   end;
  215. end;
  216. {------------------------------------------------------------------------------}
  217.  
  218. procedure TLEDPaint.SetBevelInner(Value: TPanelBevel);
  219. begin
  220.   if FBevelInner <> Value then
  221.   begin
  222.     FBevelInner:=Value;
  223.     if FBevelOuter <> bvNone then Border:=FBevelWidth else Border:=0;
  224.     if FBevelInner <> bvNone then Inc(Border,FBevelWidth);
  225.     Draw(True);
  226.   end;
  227. end;
  228. {------------------------------------------------------------------------------}
  229.  
  230. procedure TLEDPaint.SetBevelWidth(Value: Byte);
  231. begin
  232.   if FBevelWidth <> Value then
  233.   begin
  234.     FBevelWidth:=Value;
  235.     if FBevelOuter <> bvNone then Border:=FBevelWidth else Border:=0;
  236.     if FBevelInner <> bvNone then Inc(Border,FBevelWidth);
  237.     Draw(True);
  238.   end;
  239. end;
  240. {------------------------------------------------------------------------------}
  241.  
  242. procedure TLEDPaint.SetLED(Value: Boolean);
  243. begin
  244.   if FLEDOn <> Value then
  245.   begin
  246.     FLEDOn:=Value;
  247.     Draw(False);
  248.   end;
  249. end;
  250. {------------------------------------------------------------------------------}
  251.  
  252. procedure TLEDPaint.SetLEDColor(Value: TLEDColor);
  253. begin
  254.   if FLEDColor <> Value then
  255.   begin
  256.     FLEDColor:=Value;
  257.     Draw(False);
  258.   end;
  259. end;
  260. {------------------------------------------------------------------------------}
  261.  
  262. procedure TLEDPaint.SetLEDType(Value: TLEDType);
  263. begin
  264.   if FLEDType <> Value then
  265.   begin
  266.     FLEDType:=Value;
  267.     Draw(True);
  268.   end;
  269. end;
  270. {------------------------------------------------------------------------------}
  271.  
  272. procedure Register;
  273. begin
  274.   RegisterComponents('Udo|s',[TLEDPaint]);
  275. end;
  276. {------------------------------------------------------------------------------}
  277.  
  278. initialization
  279. end.
  280.  
  281.